import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建 axios 实例
const service = axios.create({
    // 基础URL，会自动加在请求地址前面
    baseURL: import.meta.env.VITE_API_URL,
    // 超时时间
    timeout: 15000,
    // 请求头
    headers: {
        'Content-Type': 'application/json;charset=utf-8'
    },
    crossDomain: true,
    withCredentials: true,
})

// // 请求拦截器
// service.interceptors.request.use(
//     config => {
//         // 在请求发送之前做一些处理
//         // 例如：添加 token
//         const token = localStorage.getItem('token')
//         if (token) {
//             config.headers['Authorization'] = `Bearer ${token}`
//         }
//         return config
//     },
//     error => {
//         // 处理请求错误
//         console.error('请求错误：', error)
//         return Promise.reject(error)
//     }
// )

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 2xx 范围内的状态码都会触发该函数
        const res = response.data

        // 这里假设后端返回的数据结构为 { code: number, msg: string, data: any }
        if (res.code === 200) {
            return res
        }

        // 处理其他状态码
        ElMessage.error(res.msg || '请求失败')
        return Promise.reject(new Error(res.msg || '请求失败'))
    },
    error => {
        // 超出 2xx 范围的状态码都会触发该函数
        console.error('响应错误：', error)

        // 处理特定的错误状态码
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    ElMessage.error('未授权，请重新登录')
                    // 可以在这里处理登录过期的逻辑
                    // router.push('/login')
                    break
                case 403:
                    ElMessage.error('拒绝访问')
                    break
                case 404:
                    ElMessage.error('请求的资源不存在')
                    break
                case 500:
                    ElMessage.error('服务器错误')
                    break
                default:
                    ElMessage.error(error.response.data.msg || '未知错误')
            }
        } else if (error.request) {
            // 请求已经发出，但没有收到响应
            ElMessage.error('网络错误，请检查您的网络连接')
        } else {
            // 请求配置发生的错误
            ElMessage.error('请求配置错误')
        }

        return Promise.reject(error)
    }
)
export default service